#include "wx/wxprec.h"
#if wxUSE_FINDREPLDLG

#ifndef WX_PRECOMP
#endif

#include "wx/fdrepdlg.h"

// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------

IMPLEMENT_DYNAMIC_CLASS( wxFindDialogEvent, wxCommandEvent )

DEFINE_EVENT_TYPE( wxEVT_COMMAND_FIND )
DEFINE_EVENT_TYPE( wxEVT_COMMAND_FIND_NEXT )
DEFINE_EVENT_TYPE( wxEVT_COMMAND_FIND_REPLACE )
DEFINE_EVENT_TYPE( wxEVT_COMMAND_FIND_REPLACE_ALL )
DEFINE_EVENT_TYPE( wxEVT_COMMAND_FIND_CLOSE )

// ============================================================================
// implementations
// ============================================================================

// ----------------------------------------------------------------------------
// wxFindReplaceData
// ----------------------------------------------------------------------------

void wxFindReplaceData::Init() {
  m_Flags = 0;
}

// ----------------------------------------------------------------------------
// wxFindReplaceDialogBase
// ----------------------------------------------------------------------------

wxFindReplaceDialogBase::~wxFindReplaceDialogBase() {
}

void wxFindReplaceDialogBase::Send( wxFindDialogEvent& event ) {
  // we copy the data to dialog->GetData() as well
  m_FindReplaceData->m_Flags = event.GetFlags();
  m_FindReplaceData->m_FindWhat = event.GetFindString();
  if( HasFlag( wxFR_REPLACEDIALOG ) &&
      ( event.GetEventType() == wxEVT_COMMAND_FIND_REPLACE ||
        event.GetEventType() == wxEVT_COMMAND_FIND_REPLACE_ALL ) ) {
    m_FindReplaceData->m_ReplaceWith = event.GetReplaceString();
  }
  // translate wxEVT_COMMAND_FIND_NEXT to wxEVT_COMMAND_FIND if needed
  if( event.GetEventType() == wxEVT_COMMAND_FIND_NEXT ) {
    if( m_FindReplaceData->m_FindWhat != m_lastSearch ) {
      event.SetEventType( wxEVT_COMMAND_FIND );
      m_lastSearch = m_FindReplaceData->m_FindWhat;
    }
  }
  if( !GetEventHandler()->ProcessEvent( event ) ) {
    // the event is not propagated upwards to the parent automatically
    // because the dialog is a top level window, so do it manually as
    // in 9 cases of 10 the message must be processed by the dialog
    // owner and not the dialog itself
    ( void )GetParent()->GetEventHandler()->ProcessEvent( event );
  }
}

#endif // wxUSE_FINDREPLDLG

